package cn.wolfcode.wolf2w.redis.util;

import cn.wolfcode.wolf2w.util.Consts;
import lombok.Getter;
import lombok.Setter;

/**
 * redis 的 key管理工具类
 * 约定: 一个枚举实例就是一个key
 */
@Getter
public enum RedisKeys {
    // 用户点赞攻略key前缀
    USER_THUMBUP_STRATEGY("user_thumbup_strategy", -1L),
    // 用户收藏攻略key前缀
    USER_FAVOR_STRATEGY("user_favor_strategy", -1L),
    // 用户登录token前缀  这里已经等同于使用了有参构造器创建出该实例了
    USER_LOGIN_TOKEN("user_login_token", Consts.USER_INFO_TOKEN_VAI_TIME * 60L),
    // 设置统计设计VO的key的前缀
    STRATEGY_STATIS_VO("strategy_statis_vo", -1L),
    // 短信验证码前缀
    VERIY_CODE("verify_code",Consts.VERIFY_CODE_VAI_TIME * 60L);

    // 定义prefix前缀, 可获取,也可自己设置, 一般不提供setter方法
    //@Setter
    private String prefix;  // redis的key前缀
    //@Setter
    private Long time;     // redis的key的有效时间, -1 表示不需要指定过期时间, 单位秒
    // 提供有参构造器, 定义枚举的实例
    private RedisKeys(String prefix, Long time) {
        this.prefix = prefix;
        this.time = time;
    }
    // 提供 拼接完整的redis key 的方法
    public String join(String... values) {
        StringBuilder sb = new StringBuilder(80);
        sb.append(this.prefix);
        for (String value : values) {
            sb.append(":" + value);
        }
        return sb.toString();
    }
}
